<?php

namespace App\ServicesNew;

use App\BO\CartItem\CreateCartItemInfo;
use App\Entities\CartItemEntity;
use App\Entities\CouponCodeEntity;

interface CartService
{
    /**
     * 获取用户购物车信息
     * @param int $userId
     * @return CartItemEntity|null
     */
    public function getCartItemEntityByUserId(int $userId);

    /**
     * 删除用户的购物车
     * @param int $userId
     * @return void
     */
    public function clearUserCartItem(int $userId);

    /**
     * 添加购物车
     * @param CreateCartItemInfo $cartItemInfo
     * @return mixed
     */
    public function createCartItem(CreateCartItemInfo $cartItemInfo);

    /**
     * 获取购物车能用的优惠券
     * @param CartItemEntity $cartItemEntity
     * @return CouponCodeEntity[]
     */
    public function getUseAbleCouponByCartItemEntity(CartItemEntity $cartItemEntity);

    /**
     * 按可用与不可用将优惠券分组
     * @param CartItemEntity $cartItemEntity
     * @return array
     */
    public function useAbleGroupByCouponByCartItemEntity(CartItemEntity $cartItemEntity);

    /**
     * 此购物车能否使用此优惠券
     * @param CartItemEntity $cartItemEntity
     * @param CouponCodeEntity $couponCodeEntity
     * @return bool
     */
    public function useAbleCouponCheckByCartItemEntity(CartItemEntity $cartItemEntity, CouponCodeEntity $couponCodeEntity);
}
